#ifndef POLLER_HPP
#define POLLER_HPP

#include <sys/epoll.h>
#include <vector>
#include <unordered_map>
#include <memory>
#include "Channel.hpp" // Assuming sp_Channel is defined in Channel.h
#include <iostream>
#include <mutex>

#define EPOLLWAIT_TIME 10000 // 定义 epoll_wait 的超时时间
const int MAX_EVENT_NUM = 4096; // 定义 epoll_wait 返回的最大事件数
/*
多路复用核心 ：封装 epoll 系统调用，管理所有注册的 Channel，监听 fd 事件。
事件监听与通知 ：通过 epoll_wait 获取就绪事件，并返回给 EventLoop。
*/
class Poller {
public:
    Poller();
    ~Poller();
    void epoll_add(const ChannelPtr& request);
    void epoll_mod(const ChannelPtr& request);
    void epoll_del(const ChannelPtr& request);
    void poll(std::vector<ChannelPtr>& req);

private:
    int epollFd_; // 该类所封装的 epoll 文件描述符，通过 epoll_create 方法返回的 epoll 句柄
    std::vector<epoll_event> events_; // epoll_wait() 返回的活动事件都放在这个数组中
    std::unordered_map<int, ChannelPtr> mpFd2Channel_; // 文件描述符到 Channel 的映射，记录所有注册在 Poller 上的 client_Channel
};

#endif // POLLER_HPP